#[macro_export]
macro_rules! vec {
    // 根据macro的定义，这里用[] {} ()都可以
    // https://doc.rust-lang.org/reference/macros-by-example.html
    // $x:expr 表示捕获一个表达式
    [ $( $x:expr ),* ] => {
        {
            let mut temp_vec = Vec::new();
            $(
                println!("got {}", $x);
                temp_vec.push($x);
            )*
            temp_vec
        }
    };
}

fn main() {
    println!("Hello, world!");

    // 宏可以更灵活，不受函数的固定参数或者类型的限制。
    // 对某个类型，实现实现发有的trait。

    // 宏是用rust写rust代码，比较难理解。

    // vec!后使用{} [] ()都可以。只是大家更习惯数组用[]表示。
    let v = vec!{12,1+1,3};
    println!("v: {:?}", v);
    // 空格会被编译器去掉，所以这样编译不过。
    // let v = vec!{12 1+1,3};
    let v = vec!{12/ 1+1,3};
    println!("v: {:?}", v);
}
